PyTorch socket.error [Errno 111] Connection refused

文章作者:Tyan
博客:noahsnail.com  |  CSDN  |  简书

1. 问题描述

在nvidia-docker中使用PyTorch训练深度模型时,会碰到程序突然挂掉的情况,主要现象是产生core文件,有时输出错误信息,有时没有错误信息,进程会挂在哪里,错误信息类似于:

1
socket.error: [Errno 111] Connection refused

通常问题会定位在/usr/local/lib/python2.7/dist-packages/torch/utils/data/dataloader.py

2. 问题原因

Please note that PyTorch uses shared memory to share data between processes, so if torch multiprocessing is used (e.g. for multithreaded data loaders) the default shared memory segment size that container runs with is not enough, and you should increase shared memory size either with --ipc=host or --shm-size command line options to nvidia-docker run.

主要原因在于PyTorch的数据加载是多线程的,它们使用的是共享内存来共享数据,默认的共享内存是不够的,因此需要增加共享内存。

3. 解决方案

主要是在启动docker时加上--ipc=host参数。

1
nvidia-docker run --ipc=host -ti -v $(pwd):/workspace docker-image

参考资料

https://github.com/pytorch/pytorch

如果有收获,可以请我喝杯咖啡!